home *** CD-ROM | disk | FTP | other *** search
/ Network PC / Network PC.iso / amiga utilities / communication / bbs / termv4.6 / extras / source / term-source.lha / CursorPanel.c < prev    next >
Encoding:
C/C++ Source or Header  |  1996-03-18  |  8.2 KB  |  376 lines

  1. /*
  2. **    CursorPanel.c
  3. **
  4. **    Editing panel for cursor key configuration
  5. **
  6. **    Copyright © 1990-1996 by Olaf `Olsen' Barthel
  7. **        All Rights Reserved
  8. **
  9. **    :ts=4
  10. */
  11.  
  12. #ifndef _GLOBAL_H
  13. #include "Global.h"
  14. #endif
  15.  
  16. enum    {    GAD_QUALIFIER=1,GAD_UP,GAD_DOWN,GAD_RIGHT,GAD_LEFT,
  17.             GAD_USE,GAD_LOAD,GAD_SAVE,GAD_CANCEL,GAD_DEFAULT,
  18.             GAD_DISCARD
  19.         };
  20.  
  21. BOOL
  22. CursorPanelConfig(struct Configuration *LocalConfig,struct CursorKeys *CursorKeys,STRPTR LastCursorKeys,struct Window *Parent,BOOLEAN *ChangedPtr)
  23. {
  24.     struct CursorKeys    *Keys;
  25.     BOOL                 Changed = FALSE;
  26.  
  27.     if(Keys = (struct CursorKeys *)AllocVecPooled(sizeof(struct CursorKeys),MEMF_ANY))
  28.     {
  29.         struct LayoutHandle *Handle;
  30.  
  31.         CopyMem(CursorKeys,Keys,sizeof(struct CursorKeys));
  32.  
  33.         if(Handle = LT_CreateHandleTags(Parent -> WScreen,
  34.             LH_LocaleHook,    &LocaleHook,
  35.         TAG_DONE))
  36.         {
  37.             struct Window *PanelWindow;
  38.  
  39.             LT_New(Handle,
  40.                 LA_Type,VERTICAL_KIND,
  41.             TAG_DONE);
  42.             {
  43.                 LT_New(Handle,
  44.                     LA_Type,VERTICAL_KIND,
  45.                 TAG_DONE);
  46.                 {
  47.                     LT_New(Handle,
  48.                         LA_Type,        CYCLE_KIND,
  49.                         LA_LabelID,        MSG_MACROPANEL_KEY_MODIFIER_GAD,
  50.                         LA_ID,            GAD_QUALIFIER,
  51.                         LACY_TabKey,    TRUE,
  52.                         LACY_FirstLabel,MSG_MACROPANEL_NONE_TXT,
  53.                         LACY_LastLabel,    MSG_MACROPANEL_CONTROL_TXT,
  54.                     TAG_DONE);
  55.  
  56.                     LT_New(Handle,
  57.                         LA_Type,        XBAR_KIND,
  58.                     TAG_DONE);
  59.  
  60.                     LT_EndGroup(Handle);
  61.                 }
  62.  
  63.                 LT_New(Handle,
  64.                     LA_Type,VERTICAL_KIND,
  65.                 TAG_DONE);
  66.                 {
  67.                     LT_New(Handle,
  68.                         LA_Type,        STRING_KIND,
  69.                         LA_LabelID,        MSG_CURSORPANEL_CURSOR_UP_GAD,
  70.                         LA_Chars,        30,
  71.                         LA_ID,            GAD_UP,
  72.                         GTST_MaxChars,    255,
  73.                     TAG_DONE);
  74.  
  75.                     LT_New(Handle,
  76.                         LA_Type,        STRING_KIND,
  77.                         LA_LabelID,        MSG_CURSORPANEL_CURSOR_DOWN_GAD,
  78.                         LA_Chars,        30,
  79.                         LA_ID,            GAD_DOWN,
  80.                         GTST_MaxChars,    255,
  81.                     TAG_DONE);
  82.  
  83.                     LT_New(Handle,
  84.                         LA_Type,        STRING_KIND,
  85.                         LA_LabelID,        MSG_CURSORPANEL_CURSOR_RIGHT_GAD,
  86.                         LA_Chars,        30,
  87.                         LA_ID,            GAD_RIGHT,
  88.                         GTST_MaxChars,    255,
  89.                     TAG_DONE);
  90.  
  91.                     LT_New(Handle,
  92.                         LA_Type,        STRING_KIND,
  93.                         LA_LabelID,        MSG_CURSORPANEL_CURSOR_LEFT_GAD,
  94.                         LA_Chars,        30,
  95.                         LA_ID,            GAD_LEFT,
  96.                         GTST_MaxChars,    255,
  97.                     TAG_DONE);
  98.  
  99.                     LT_EndGroup(Handle);
  100.                 }
  101.  
  102.                 LT_New(Handle,
  103.                     LA_Type,VERTICAL_KIND,
  104.                 TAG_DONE);
  105.                 {
  106.                     LT_New(Handle,
  107.                         LA_Type,        XBAR_KIND,
  108.                         LAXB_FullSize,    TRUE,
  109.                     TAG_DONE);
  110.  
  111.                     LT_EndGroup(Handle);
  112.                 }
  113.  
  114.                 LT_New(Handle,LA_Type,HORIZONTAL_KIND,
  115.                     LAGR_SameSize,    TRUE,
  116.                     LAGR_Spread,    TRUE,
  117.                 TAG_DONE);
  118.                 {
  119.                     LT_New(Handle,
  120.                         LA_Type,        BUTTON_KIND,
  121.                         LA_LabelID,        MSG_GLOBAL_USE_GAD,
  122.                         LA_ID,            GAD_USE,
  123.                         LABT_ReturnKey,    TRUE,
  124.                         LABT_ExtraFat,    TRUE,
  125.                     TAG_DONE);
  126.  
  127.                     LT_New(Handle,
  128.                         LA_Type,        BUTTON_KIND,
  129.                         LA_LabelID,        MSG_GLOBAL_DEFAULT_GAD,
  130.                         LA_ID,            GAD_DEFAULT,
  131.                     TAG_DONE);
  132.  
  133.                     LT_New(Handle,
  134.                         LA_Type,        BUTTON_KIND,
  135.                         LA_LabelID,        MSG_GLOBAL_LOAD_GAD,
  136.                         LA_ID,            GAD_LOAD,
  137.                     TAG_DONE);
  138.  
  139.                     LT_New(Handle,
  140.                         LA_Type,        BUTTON_KIND,
  141.                         LA_LabelID,        MSG_GLOBAL_SAVE_GAD,
  142.                         LA_ID,            GAD_SAVE,
  143.                     TAG_DONE);
  144.  
  145.                     LT_New(Handle,
  146.                         LA_Type,        BUTTON_KIND,
  147.                         LA_LabelID,        MSG_DISCARD_GAD,
  148.                         LA_ID,            GAD_DISCARD,
  149.                     TAG_DONE);
  150.  
  151.                     LT_New(Handle,
  152.                         LA_Type,        BUTTON_KIND,
  153.                         LA_LabelID,        MSG_GLOBAL_CANCEL_GAD,
  154.                         LA_ID,            GAD_CANCEL,
  155.                         LABT_EscKey,    TRUE,
  156.                     TAG_DONE);
  157.  
  158.                     LT_EndGroup(Handle);
  159.                 }
  160.  
  161.                 LT_EndGroup(Handle);
  162.             }
  163.  
  164.             if(PanelWindow = LT_Build(Handle,
  165.                 LAWN_TitleID,        MSG_CURSORPANEL_CURSOR_PREFERENCES_TXT,
  166.                 LAWN_IDCMP,            IDCMP_CLOSEWINDOW,
  167.                 LAWN_HelpHook,        &GuideHook,
  168.                 LAWN_Parent,        Parent,
  169.                 WA_DepthGadget,        TRUE,
  170.                 WA_CloseGadget,        TRUE,
  171.                 WA_DragBar,            TRUE,
  172.                 WA_RMBTrap,            TRUE,
  173.                 WA_Activate,        TRUE,
  174.                 WA_SimpleRefresh,    TRUE,
  175.             TAG_DONE))
  176.             {
  177.                 struct IntuiMessage        *Message;
  178.                 BOOL                     Done = FALSE;
  179.                 ULONG                     MsgClass;
  180.                 UWORD                     MsgCode;
  181.                 struct Gadget            *MsgGadget;
  182.                 UBYTE                     DummyBuffer[MAX_FILENAME_LENGTH],
  183.                                         *DummyChar;
  184.                 struct FileRequester    *FileRequest;
  185.                 LONG                     Modifier = 0,i;
  186.  
  187.                 GuideContext(CONTEXT_CURSOR);
  188.  
  189.                 PushWindow(PanelWindow);
  190.  
  191.                 LT_ShowWindow(Handle,TRUE);
  192.  
  193.                 for(i = 0 ; i < 4 ; i++)
  194.                 {
  195.                     LT_SetAttributes(Handle,GAD_UP + i,
  196.                         GTST_String,Keys -> Keys[Modifier][i],
  197.                     TAG_DONE);
  198.                 }
  199.  
  200.                 do
  201.                 {
  202.                     if(Wait(PORTMASK(PanelWindow -> UserPort) | SIG_BREAK) & SIG_BREAK)
  203.                         break;
  204.  
  205.                     while(Message = (struct IntuiMessage *)LT_GetIMsg(Handle))
  206.                     {
  207.                         MsgClass    = Message -> Class;
  208.                         MsgCode        = Message -> Code;
  209.                         MsgGadget    = (struct Gadget *)Message -> IAddress;
  210.  
  211.                         LT_ReplyIMsg(Message);
  212.  
  213.                         if(MsgClass == IDCMP_CLOSEWINDOW)
  214.                         {
  215.                             Done = TRUE;
  216.                             Changed = FALSE;
  217.                         }
  218.  
  219.                         if(MsgClass == IDCMP_GADGETUP)
  220.                         {
  221.                             switch(MsgGadget -> GadgetID)
  222.                             {
  223.                                 case GAD_DEFAULT:
  224.  
  225.                                     ResetCursorKeys(Keys);
  226.  
  227.                                     for(i = 0 ; i < 4 ; i++)
  228.                                     {
  229.                                         LT_SetAttributes(Handle,GAD_UP + i,
  230.                                             GTST_String,Keys -> Keys[Modifier][i],
  231.                                         TAG_DONE);
  232.                                     }
  233.  
  234.                                     break;
  235.  
  236.                                 case GAD_QUALIFIER:
  237.  
  238.                                     for(i = 0 ; i < 4 ; i++)
  239.                                         strcpy(Keys -> Keys[Modifier][i],(STRPTR)LT_GetAttributes(Handle,GAD_UP + i,TAG_DONE));
  240.  
  241.                                     Modifier = MsgCode;
  242.  
  243.                                     for(i = 0 ; i < 4 ; i++)
  244.                                     {
  245.                                         LT_SetAttributes(Handle,GAD_UP + i,
  246.                                             GTST_String,Keys -> Keys[Modifier][i],
  247.                                         TAG_DONE);
  248.                                     }
  249.  
  250.                                     break;
  251.  
  252.                                 case GAD_USE:
  253.  
  254.                                     LT_LockWindow(PanelWindow);
  255.  
  256.                                     for(i = 0 ; i < 4 ; i++)
  257.                                         strcpy(Keys -> Keys[Modifier][i],(STRPTR)LT_GetAttributes(Handle,GAD_UP + i,TAG_DONE));
  258.  
  259.                                     CopyMem(Keys,CursorKeys,sizeof(struct CursorKeys));
  260.  
  261.                                     Changed = TRUE;
  262.  
  263.                                     if(ChangedPtr)
  264.                                         *ChangedPtr = TRUE;
  265.  
  266.                                     Done = TRUE;
  267.                                     break;
  268.  
  269.                                 case GAD_DISCARD:
  270.  
  271.                                     if(ChangedPtr)
  272.                                         *ChangedPtr = FALSE;
  273.  
  274.                                     Done = TRUE;
  275.                                     Changed = TRUE;
  276.                                     break;
  277.  
  278.                                 case GAD_CANCEL:
  279.  
  280.                                     Changed = FALSE;
  281.                                     Done = TRUE;
  282.                                     break;
  283.  
  284.                                 case GAD_LOAD:
  285.  
  286.                                     strcpy(DummyBuffer,LastCursorKeys);
  287.  
  288.                                     DummyChar = PathPart(DummyBuffer);
  289.  
  290.                                     *DummyChar = 0;
  291.  
  292.                                     LT_LockWindow(PanelWindow);
  293.  
  294.                                     if(FileRequest = GetFile(PanelWindow,LocaleString(MSG_CURSORPANEL_LOAD_CURSOR_KEYS_TXT),DummyBuffer,FilePart(LastCursorKeys),DummyBuffer,"#?.prefs",FALSE,FALSE,FALSE,LocaleString(MSG_GLOBAL_LOAD_TXT),TRUE))
  295.                                     {
  296.                                         if(!ReadIFFData(DummyBuffer,Keys,sizeof(struct CursorKeys),ID_KEYS))
  297.                                             ShowError(PanelWindow,ERR_LOAD_ERROR,IoErr(),DummyBuffer);
  298.                                         else
  299.                                         {
  300.                                             Changed = TRUE;
  301.  
  302.                                             if(ChangedPtr)
  303.                                                 *ChangedPtr = FALSE;
  304.  
  305.                                             strcpy(LastCursorKeys,DummyBuffer);
  306.  
  307.                                             if(LocalConfig)
  308.                                                 strcpy(LocalConfig -> CursorFileName,LastCursorKeys);
  309.  
  310.                                             for(i = 0 ; i < 4 ; i++)
  311.                                             {
  312.                                                 LT_SetAttributes(Handle,GAD_UP + i,
  313.                                                     GTST_String,Keys -> Keys[Modifier][i],
  314.                                                 TAG_DONE);
  315.                                             }
  316.                                         }
  317.  
  318.                                         FreeAslRequest(FileRequest);
  319.                                     }
  320.  
  321.                                     LT_UnlockWindow(PanelWindow);
  322.  
  323.                                     break;
  324.  
  325.                                 case GAD_SAVE:
  326.  
  327.                                     strcpy(DummyBuffer,LastCursorKeys);
  328.  
  329.                                     DummyChar = PathPart(DummyBuffer);
  330.  
  331.                                     *DummyChar = 0;
  332.  
  333.                                     LT_LockWindow(PanelWindow);
  334.  
  335.                                     for(i = 0 ; i < 4 ; i++)
  336.                                         strcpy(Keys -> Keys[Modifier][i],(STRPTR)LT_GetAttributes(Handle,GAD_UP + i,TAG_DONE));
  337.  
  338.                                     if(FileRequest = GetFile(PanelWindow,LocaleString(MSG_CURSORPANEL_SAVE_CURSOR_KEYS_TXT),DummyBuffer,FilePart(LastCursorKeys),DummyBuffer,"#?.prefs",TRUE,FALSE,FALSE,LocaleString(MSG_GLOBAL_SAVE_TXT),TRUE))
  339.                                     {
  340.                                         if(!WriteIFFData(DummyBuffer,Keys,sizeof(struct CursorKeys),ID_KEYS))
  341.                                             ShowError(PanelWindow,ERR_SAVE_ERROR,IoErr(),DummyBuffer);
  342.                                         else
  343.                                         {
  344.                                             strcpy(LastCursorKeys,DummyBuffer);
  345.  
  346.                                             if(LocalConfig)
  347.                                                 strcpy(LocalConfig -> CursorFileName,LastCursorKeys);
  348.  
  349.                                             if(ChangedPtr)
  350.                                                 *ChangedPtr = FALSE;
  351.                                         }
  352.  
  353.                                         FreeAslRequest(FileRequest);
  354.                                     }
  355.  
  356.                                     LT_UnlockWindow(PanelWindow);
  357.  
  358.                                     break;
  359.                             }
  360.                         }
  361.                     }
  362.                 }
  363.                 while(!Done);
  364.  
  365.                 PopWindow();
  366.             }
  367.  
  368.             LT_DeleteHandle(Handle);
  369.         }
  370.  
  371.         FreeVecPooled(Keys);
  372.     }
  373.  
  374.     return(Changed);
  375. }
  376.